<?php
/**
 * Created by PhpStorm.
 * User: wanghuabing
 * Date: 2015/3/5
 * Time: 17:16
 */

/**
 * 生成guid
 */
function create_guid() {
    $charid = strtolower(md5(uniqid(mt_rand(), true)));
    $hyphen='';
    $uuid = substr($charid, 0, 8).$hyphen
        .substr($charid, 8, 4).$hyphen
        .substr($charid,12, 4).$hyphen
        .substr($charid,16, 4).$hyphen
        .substr($charid,20,12);
    return $uuid;
}
/**
 * 生成随机数
 */
function randomkeys($length)
{
    $key='';
    $pattern='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
    for($i=0;$i<$length;$i++)
    {
        $key .= $pattern{mt_rand(0,35)};    //生成php随机数
    }
    return $key;
}
/**
 * 生成数字随机数
 */
function randomkeys_num($length){
    $key='';
    $pattern='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
    for($i=0;$i<$length;$i++)
    {
        $key .= $pattern{mt_rand(0,9)};    //生成php随机数
    }
    return $key;
}

/**
 *返回主(0)/子(menuid)菜单
 */
function get_mainmenu($menulist,$menuid='0'){
    $re=array();
    foreach($menulist as $item){
        if($item['parentmenuid']==$menuid){
            array_push($re,$item);
        }
    }
    if(count($re)>0){
        $re=array_sort($re,'sortnum',SORT_ASC);
    }
    return $re;
}

/**
 *二维数组排序,数据列表
 */
function array_sort($multi_array, $sort_key, $sort = SORT_ASC){
    if (is_array ( $multi_array )) {
        foreach ( $multi_array as $row_array ) {
            if (is_array ( $row_array )) {
                $key_array [] = $row_array [$sort_key];
            }else{
                return false;
            }
        }
    }else{
        return false;
    }
    array_multisort ( $key_array, $sort, $multi_array );
    return $multi_array;
}

/**
 *二维数组去掉重
 */
function unique_arr($array2D,$stkeep=false,$ndformat=true)
{
    // 判断是否保留一级数组键 (一级数组键可以为非数字)
    if($stkeep) $stArr = array_keys($array2D);

    // 判断是否保留二级数组键 (所有二级数组键必须相同)
    if($ndformat) $ndArr = array_keys(end($array2D));

    //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
    foreach ($array2D as $v){
        $v = join("|",$v);
        $temp[] = $v;
    }

    //去掉重复的字符串,也就是重复的一维数组
    $temp = array_unique($temp);

    //再将拆开的数组重新组装
    foreach ($temp as $k => $v)
    {
        if($stkeep) $k = $stArr[$k];
        if($ndformat)
        {
            $tempArr = explode("|",$v);
            foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
        }
        else $output[$k] = explode(",",$v);
    }

    return $output;
}

/**
 * 转换每个中文汉字urlencode
 */
function replay_china($str)
{
//        $pa = '/[\x{4e00}-\x{9fa5}]/siu';//中文正则判断
    $pa='/./us';
    preg_match_all($pa, $str, $r);
    $string="";
    if(count($r[0])>0) {
        for ($i = 0; $i < count($r[0]); $i++) {
            $val = $r[0][$i];
            preg_match_all("/^[\x{4e00}-\x{9fa5}]+$/u", $val, $r2);
            if (count($r2[0]) > 0) {
                $string .= urlencode($r2[0][0]);
            } else {
                $string .= $val;
            }
        }
    }
    if($string==""){
        $string=$str;
    }
    $string=replace_str($string);
    return $string;
}

/**
 * 将中文内容中的标点转换为urlencode
 */
function replace_str($str){
    $str=str_replace('“',urlencode('“'),$str);
    $str=str_replace('”',urlencode('”'),$str);
    $str=str_replace('【',urlencode('【'),$str);
    $str=str_replace('】',urlencode('】'),$str);
    $str=str_replace('，',urlencode('，'),$str);
    $str=str_replace('。',urlencode('。'),$str);
    $str=str_replace('！',urlencode('！'),$str);
    $str=str_replace('：',urlencode('：'),$str);
    $str=str_replace('；',urlencode('；'),$str);
    $str=str_replace('《',urlencode('《'),$str);
    $str=str_replace('》',urlencode('》'),$str);
    $str=str_replace('↓',urlencode('↓'),$str);
    $str=str_replace('‘',urlencode('‘'),$str);
    $str=str_replace('’',urlencode('’'),$str);
    $str=str_replace('·',urlencode('·'),$str);
    $str=str_replace('？',urlencode('？'),$str);
    $str=str_replace('—',urlencode('—'),$str);
    $str=str_replace('、',urlencode('、'),$str);
    $str=str_replace('（',urlencode('（'),$str);
    $str=str_replace('）',urlencode('）'),$str);
    $str=str_replace('…',urlencode('…'),$str);
    return $str;
}

/**
 * 查找一定范围内的经纬度值
 * 传入值：纬度  经度  查找半径(km)
 * 返回值：最小纬度、经度，最大纬度、经度
 */
function getAround($lat,$lng,$raidus){
    $myLat = $lat;//接收到的当前位置的纬度
    $myLng = $lng;//接收到的当前位置的经度

    //以下为核心代码
    $range = 180 / pi() * $raidus / 6372.797;     //里面的 $raidus 就代表搜索 1km 之内，单位km
    $lngR = $range / cos($myLat * pi() / 180);
    $maxLat = $myLat + $range;//最大纬度
    $minLat = $myLat - $range;//最小纬度
    $maxLng = $myLng + $lngR;//最大经度
    $minLng = $myLng - $lngR;//最小经度
    $result['minwei']=$minLat;
    $result['minjing']=$minLng;
    $result['maxwei']=$maxLat;
    $result['maxjing']=$maxLng;
    return $result;
}

/**
 * 通过经纬度获取详细地理位置
 * 传入值：纬度、经度
 * 返回值：具体地理位置
 */
function getRealyAddress($lat,$lng)  {
    $place_url='http://api.map.baidu.com/geocoder?output=json&location='.$lat.','.$lng.'&key=BF35e19ba27e4e16ed5df727c0e3d099';
    $json_place=file_get_contents($place_url);
    $place_arr=json_decode($json_place,true);
    $address=$place_arr['result']['formatted_address'];
    return $address;
}

/**
 * 通过具体地理位置获取经纬度
 * 传入值：地理位置
 * 返回值：纬度、经度
 */
function getLatLong($address){
    $_url = "http://api.map.baidu.com/geocoder/v2/?address=$address&output=json&ak=BF35e19ba27e4e16ed5df727c0e3d099";
    $json_place=file_get_contents($_url);
    $place_arr=json_decode($json_place,true);
    $arr['lat']=$place_arr['result']['location']['lat'];
    $arr['lng']=$place_arr['result']['location']['lng'];
    return $arr;
}

/**
 * 通过IP获取经纬度
 * 传入值：地理位置
 * 返回值：纬度、经度
 */
function getLatLongByIp($ip){
    $_url = "http://api.map.baidu.com/location/ip?ak=BF35e19ba27e4e16ed5df727c0e3d099&ip=$ip&coor=bd09ll";
    $json_place=file_get_contents($_url);
    $place_arr=json_decode($json_place,true);
    if($place_arr['status']==0){
        $arr['lat']=$place_arr['content']['point']['y'];
        $arr['lng']=$place_arr['content']['point']['x'];
        return $arr;
    }else{
        return false;
    }
}

/**
 * 坐标计算角度
 */
function rad($d){
    return $d * 3.1415926535898 / 180.0;
}
/**
 * 获取两坐标之间的距离
 * 传入值：纬度、经度、纬度、经度
 * 返回值：两坐标间的距离（km）
 */
function GetDistance($lat1, $lng1, $lat2, $lng2){
    $EARTH_RADIUS = 6378.137;
    $radLat1 = rad($lat1);
    $radLat2 = rad($lat2);
    $a = $radLat1 - $radLat2;
    $b = rad($lng1) - rad($lng2);
    $s = 2 * asin(sqrt(pow(sin($a/2),2) +  cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));
    $s = $s * $EARTH_RADIUS;
    $s = round($s * 10000) / 10000;
    return $s;
}
/**
 * 获取两坐标之间的直角距离
 * 传入值：纬度、经度、纬度、经度
 * 返回值：两坐标间的直角距离（km）
 */
function GetDestinationDistance($lat1, $lng1, $lat2, $lng2){
    $d = GetDistance($lng1, $lat1, $lng1, $lat2) + GetDistance($lng1, $lat1,  $lng2, $lat1);
    return $d;
}

/**
 * 获取数据
 */
function get_data($url){
    //初始化
    $ch = curl_init();
    //设置选项，包括URL
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    //执行并获取HTML文档内容
    $output = curl_exec($ch);
    //释放curl句柄
    curl_close($ch);
    $output=json_decode($output,true);
    return $output;
}

/**
 * 生成唯一的订单号 20110809111259232312
 * 2011-年日期
 * 08-月份
 * 09-日期
 * 11-小时
 * 12-分
 * 59-秒
 * 2323-微秒
 * 12-随机值
 * @return string
 */
function orderNum() {
    list($usec, $sec) = explode(" ", microtime());
    $usec = substr(str_replace('0.', '', $usec), 0 ,4);
    $str  = rand(10,99);
    return date("YmdHis").$usec.$str;
}